在去年的時候,已經有介紹過多國語系的基本用法了
還沒看過的話,可以先去看一下~
【在 iOS 開發路上的大小事-Day08】讓你的 App 與世界接軌!
而今天這篇則是要介紹當你的文字中有特定文字是非固定的
會根據不同的選擇顯示不同的值
以往會更動的值如果在多國文字的最前方或是最後方
那我們可以用下面這種寫法來設定
var test: Int = 10
// 更動的值在最前方
label.text = "\(test)\(NSLocalizedString("Test", comment: ""))"
// 更動的值在最後方
label.text = "\(NSLocalizedString("Test", comment: ""))\(test)"
那如果會變動的值是在多國文字的中間呢,像是下面這樣
測試123一二三
測試456一二三
測試789一二三
這種雖然可以透過設定兩個多國文字,再將其串接在一起,像是下面這樣
var test1: Int = 123
label.text = "\(NSLocalizedString("Test", comment: ""))\(test1)\(NSLocalizedString("One Two Three", comment: ""))"
但是這樣在可讀性上可能不太好,那有沒有其他好的寫法呢,其實是有的
我們可以透過下面的這種寫法來達成
Swift API ↓
Objective-C API ↓
這邊由於我只會寫 Swift,所以我就只示範 Swift 的寫法
Objective-C 的寫法,可以參考 Apple Developer Documentation 裡面的寫法
首先,先打開 Localizable.strings 檔案,找到你要改的多國文字
以上面的為例,Key-Value 就會像下面的一樣
"Test" = "測試";
"One Two Three" = "一二三";
然後改用上面講到的 localizedStringWithFormat(__:_:) 這個方法
我們只需要將兩個多國文字改成一個 Key-Value,像是下面這樣
"Test One Two Three" = "測試%d一二三";
套用到 Label 上的話,就像下面這樣
var test12: Int = 123
label.text = String.localizedStringWithFormat(NSLocalizedString("Test", comment: ""), test12)